/**
 * Arista.java
 * Descripción: Clase que representa una arista sin dirección existente entre
 * dos nodos, los cuales serán ambos coordenadas.
 * @since 11/11/2012
 * @version 1.0
 * @author Oscar Castañeda, Carnet 11086
 *         Diego García, Carnet 11360
 *         Luis Carlos Velásquez, Carnet 11085
 *         Sergio Argueta, Carnet 11029
 */

public class Arista {
    
    //Coordenadas unidas por la arista.
    private Coordenada vertice1;
    private Coordenada vertice2;
    
    //Indica si la arista es de orientación horizontal (true) o no (false).
    //De ser falsa, quiere decir que la orientación es vertical.
    private boolean orientacionHorizontal;    
    
    /**
     * Constructor de una arista entre dos coordenadas.
     * @param vertice1 Una de las Coordenadas que conforman a la arista.
     * @param vertice2 Otra de las Coordenadas que conforman a la arista.
     */
    public Arista(Coordenada vertice1, Coordenada vertice2){
        this.vertice1 = vertice1;
        this.vertice2 = vertice2;
        if(vertice1.getFila()==vertice2.getFila()){
            //Si ambas aristas están sobre la misma fila, entonces la orientación es horizontal.
            orientacionHorizontal = true;
        }else{
            //De lo contrario es vertical.
            orientacionHorizontal = false;
        }
    }
    
    /**
     * Devuelve las coordenadas conectadas por esta arista.
     * @return Coordenada[2] con los vértices de la arista.
     */
    public Coordenada[] getVertices(){
        Coordenada[] coordenadas = new Coordenada[2];
        coordenadas[0] = vertice1;
        coordenadas[1] = vertice2;
        return coordenadas;
    }        
    
    /**
     * Permite conocer si la arista representa un camino horizontal o no.
     * @return True si el camino es horizontal; false si es vertical.
     */
    public boolean esHorizontal(){
        return orientacionHorizontal;
    }
    
    /**
     * Determina si esta arista es igual a otra.
     * @param otraArista Otra Arista con la cual se compara la arista actual.
     * @return True si son iguales, false si no.
     */
    @Override
    public boolean equals(Object otraArista){        
        Coordenada[] otrosVertices = ((Arista)otraArista).getVertices();
        //Para que las aristas sean iguales, sus coordenadas deben de serlo en pares,
        //sin importar si el primer vértice de ambas son iguales y también los segundos, 
        //o si el primero de la primera arista es igual al segundo de la segunda; y el segundo de la primera al primero de la segunda.
        if(vertice1.equals(otrosVertices[0])&&vertice2.equals(otrosVertices[1])){            
            return true;
        }else{
            if(vertice1.equals(otrosVertices[1])&&vertice2.equals(otrosVertices[0])){                
                return true;
            }else{
                return false;
            }
        }
    }
    
}